/*
调试输出宏定义,使用SEGGER_RTT进行输出,查看调试输出需要使用SEGGER的J-Link软件,如J-Link RTT Viewer V7.60 等
如需使用此方法输出日志请将MDK-ARM/SEGGER/RTT/整个文件夹拷贝到工程目录下,并将MDK-ARM/SEGGER/RTT/SEGGER_RTT.c文件添加到工程中编译
如不需要调试输出,可将DEBUG_LEVEL设置为0,设置成0后将会减少Flash和RAM的使用,也可将DEBUG_LEVEL设置为1,2,3来控制输出的日志级别
*/
#ifndef DEBUG_H
#define DEBUG_H
    // 调试输出的级别,不需要可以设置0
    #define DEBUG_LEVEL  3 // 0-无，1-错误，2-警告，3-信息

    #if DEBUG_LEVEL >= 3
        #define DEBUG_INFO_ENABLE  1
        #define DEBUG_WARN_ENABLE  1
        #define DEBUG_ERROR_ENABLE 1
    #endif // DEBUG_LEVEL >= 3
    #if DEBUG_LEVEL >= 2
        #define DEBUG_WARN_ENABLE  1
        #define DEBUG_ERROR_ENABLE 1
    #endif // DEBUG_LEVEL >= 2
    #if DEBUG_LEVEL >= 1
        #define DEBUG_ERROR_ENABLE 1
    #endif // DEBUG_LEVEL >= 1
    
    #if DEBUG_LEVEL > 0
        #include <stdio.h>
        #include "SEGGER_RTT.h"
        //#define DEBUG_PRINT(format, ...) SEGGER_RTT_printf(0,"[%lu] " format "\r\n",HAL_GetTick(), ##__VA_ARGS__)
        #define DEBUG_PRINT(format, ...) SEGGER_RTT_printf(0,format "\r\n", ##__VA_ARGS__)
    #endif // DEBUG_LEVEL > 0

    // 按级别区分的调试输出
    #if DEBUG_INFO_ENABLE
    #define DEBUG_INFO(format, ...) DEBUG_PRINT("[INFO] " format, ##__VA_ARGS__)
    #else
    #define DEBUG_INFO(format, ...) do {} while(0)
    #endif
    #if DEBUG_WARN_ENABLE
    #define DEBUG_WARN(format, ...) DEBUG_PRINT("[WARN] " format, ##__VA_ARGS__)
    #else   
    #define DEBUG_WARN(format, ...) do {} while(0)
    #endif
    #if DEBUG_ERROR_ENABLE
    #define DEBUG_ERROR(format, ...) DEBUG_PRINT("[ERROR] " format, ##__VA_ARGS__)
    #else
    #define DEBUG_ERROR(format, ...) do {} while(0)
    #endif   

#endif // DEBUG_H
